package br.com.wuo.karina.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import net.miginfocom.swing.MigLayout;
import br.com.wuo.karina.model.Professor;
import br.com.wuo.karina.model.dao.impl.ProfessorDaoImpl;
import br.com.wuo.karina.utils.NumericField;

/**
 *
 * @author Renan Wuo
 */
public class PesquisarProfessor extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private MigLayout layout;
    private JTextField txtCodigo, txtNome, txtSobrenome, txtLogradouro, txtNumero, txtComplemento, txtCep,
	   				   txtBairro, txtCidade, txtEstado, txtNaturalidade, txtNacionalidade, txtTelefone, txtCelular, txtRg, txtCpf;
    private JButton btnSearch, btnUpdate, btnDelete, btnClear, btnExit;
    private JComboBox<String> cmbProfessores;
    private ProfessorDaoImpl professorDao;
    private boolean ignore = false;

    public PesquisarProfessor() {
        super("Pesquisar Professor");
        initialize();
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
        addListener();
    }

    public void initialize() {
        layout = new MigLayout("", "10px[100][250, fill][fill]10px", "");
        setLayout(layout);
        
        professorDao = new ProfessorDaoImpl();

        txtCodigo = new NumericField();
        txtNome = new JTextField();
        txtSobrenome = new JTextField();
        txtLogradouro = new JTextField();
        txtNumero = new NumericField();
        txtComplemento = new JTextField();
        txtCep = new JTextField();
        txtBairro = new JTextField();
        txtCidade = new JTextField();
        txtEstado = new JTextField();
        txtNaturalidade = new JTextField();
        txtNacionalidade = new JTextField();
        txtTelefone = new JTextField();
        txtCelular = new JTextField();
        txtRg = new JTextField();
        txtCpf = new JTextField();
        
        cmbProfessores = new JComboBox<>();
        
        populateCombos();

        disableFields();

        btnSearch = new JButton("Pesquisar");
        btnUpdate = new JButton("Editar");
        btnDelete = new JButton("Excluir");
        btnClear = new JButton("Limpar");
        btnExit = new JButton("Sair");

        add(new JLabel("Código:"), "split 3, span 2");
        add(txtCodigo, "w 50");
        add(btnSearch, "wrap 10px");
        add(cmbProfessores, "span 3, wrap, w 250!");
        add(new JLabel("Nome:"));
        add(txtNome, "grow, wrap");
        add(new JLabel("Sobrenome:"));
        add(txtSobrenome, "grow, wrap");
        add(new JLabel("Logradouro:"));
        add(txtLogradouro, "grow, wrap");
        add(new JLabel("Nº:"), "split 2");
        add(txtNumero, "grow");
        add(new JLabel("Complemento:"), "split 2");
        add(txtComplemento, "grow, wrap");
        add(new JLabel("CEP"), "split 2");
        add(txtCep, "grow");
        add(new JLabel("Bairro"), "split 2");
        add(txtBairro, "grow, wrap");        
        add(new JLabel("Cidade"), "split 2");
        add(txtCidade, "grow");        
        add(new JLabel("Estado"), "split 2");
        add(txtEstado, "grow, wrap");        
        add(new JLabel("Naturalidade"));
        add(txtNaturalidade, "wrap");        
        add(new JLabel("Nacionalidade"));
        add(txtNacionalidade, "wrap");        
        add(new JLabel("Telefone"), "split 4, span 2");
        add(txtTelefone, "grow");        
        add(new JLabel("Celular"), "split 2");
        add(txtCelular, "grow, wrap");
        add(new JLabel("RG:"), "split 4, span 2");
        add(txtRg, "grow");
        add(new JLabel("CPF:"), "split 2");
        add(txtCpf, "grow, wrap 20px");
        
        add(btnUpdate, "split 4, span 3, align 50% 50%");
        add(btnDelete);
        add(btnClear);
        add(btnExit);
        pack();

    }

    public void addListener() {
    	
    	btnSearch.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					Professor professor = professorDao.pesquisarProfessor(Integer.parseInt(txtCodigo.getText()));
					
					txtNome.setText(professor.getNome());
					txtSobrenome.setText(professor.getSobrenome());
					txtLogradouro.setText(professor.getLogradouro());
					txtNumero.setText(String.valueOf(professor.getNumero()));
					txtComplemento.setText(professor.getComplemento());
					txtCep.setText(professor.getCep());
					txtBairro.setText(professor.getBairro());
			        txtCidade.setText(professor.getCidade());
			        txtEstado.setText(professor.getEstado());
			        txtNaturalidade.setText(professor.getNaturalidade());
			        txtNacionalidade.setText(professor.getNacionalidade());
			        txtTelefone.setText(professor.getTelefone());
			        txtCelular.setText(professor.getCelular());
					txtRg.setText(professor.getRg());
					txtCpf.setText(professor.getCpf());
					
					enableFields();
				} catch (NumberFormatException e1) {
					e1.printStackTrace();
					JOptionPane.showMessageDialog(null, "Campo de busca vazio");
				} catch (SQLException e1) {
					e1.printStackTrace();
					JOptionPane.showMessageDialog(null, "Não Encontrado");
				}				
			}
		});
    	
    	cmbProfessores.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				
				if(!ignore){
									
					String item = cmbProfessores.getSelectedItem().toString();
					String[] itemsParts  = item.split("-");
					int codigo = Integer.parseInt(itemsParts[0].trim());
					
					try {
						Professor professor = professorDao.pesquisarProfessor(codigo);
						
						txtCodigo.setText(String.valueOf(professor.getCodigo()));
						txtNome.setText(professor.getNome());
						txtSobrenome.setText(professor.getSobrenome());
						txtLogradouro.setText(professor.getLogradouro());
						txtNumero.setText(String.valueOf(professor.getNumero()));
						txtComplemento.setText(professor.getComplemento());
						txtCep.setText(professor.getCep());
						txtBairro.setText(professor.getBairro());
				        txtCidade.setText(professor.getCidade());
				        txtEstado.setText(professor.getEstado());
				        txtNaturalidade.setText(professor.getNaturalidade());
				        txtNacionalidade.setText(professor.getNacionalidade());
				        txtTelefone.setText(professor.getTelefone());
				        txtCelular.setText(professor.getCelular());
						txtRg.setText(professor.getRg());
						txtCpf.setText(professor.getCpf());
						
						enableFields();
						
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					
				}else{
					ignore = false;
				}
							
			}
		});
    	
    	
    	btnUpdate.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				Professor professor = new Professor(Integer.parseInt(txtCodigo.getText()), txtNome.getText(), txtSobrenome.getText(), txtLogradouro.getText(), 
													Integer.parseInt(txtNumero.getText()), txtComplemento.getText(), txtCep.getText(), txtBairro.getText(), 
													txtCidade.getText(), txtEstado.getText(), txtNaturalidade.getText(), txtNacionalidade.getText(), 
													txtTelefone.getText(), txtCelular.getText(), txtRg.getText(), txtCpf.getText());
				
				try {
					professorDao.alterarProfessor(professor);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				clear();
				disableFields();
			}
		});
    	
    	btnDelete.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				int response = JOptionPane.showConfirmDialog(null, "Deseja excluir o professor?");
				
//				A resposta SIM tem valor 0
				if(response == 0){
					try {
						professorDao.deletarProfessor(Integer.parseInt(txtCodigo.getText()));
												
						cmbProfessores.removeItem(cmbProfessores.getSelectedItem());
						ignore = true;
						cmbProfessores.setSelectedIndex(-1);
						clear();
					} catch (NumberFormatException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}	
			}
		});

    	btnClear.addActionListener(new ActionListener() {
	
			@Override
			public void actionPerformed(ActionEvent e) {
				clear();
				disableFields();
			}
		});

    	btnExit.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();				
			}
		});
    	
    }
    
    public void populateCombos(){
    	
    	try {
			ArrayList<String> professores = professorDao.getAllProfessor();
			
			for(String professor:professores){
				cmbProfessores.addItem(professor);
			}
			
			cmbProfessores.setSelectedIndex(-1);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    }

    public void clear() {
    	txtCodigo.setText("");
    	txtNome.setText("");
        txtSobrenome.setText("");
        txtLogradouro.setText("");
        txtNumero.setText("");
        txtComplemento.setText("");
        txtCep.setText("");
        txtBairro.setText("");
        txtCidade.setText("");
        txtEstado.setText("");
        txtNaturalidade.setText("");
        txtNacionalidade.setText("");
        txtTelefone.setText("");
        txtCelular.setText("");
        txtRg.setText("");
        txtCpf.setText("");
    }
    
    public void enableFields(){
    	txtNome.setEditable(true);
        txtSobrenome.setEditable(true);
        txtLogradouro.setEditable(true);
        txtNumero.setEditable(true);
        txtComplemento.setEditable(true);
        txtCep.setEditable(true);
        txtBairro.setEditable(true);
        txtCidade.setEditable(true);
        txtEstado.setEditable(true);
        txtNaturalidade.setEditable(true);
        txtNacionalidade.setEditable(true);
        txtTelefone.setEditable(true);
        txtCelular.setEditable(true);
        txtRg.setEditable(true);
        txtCpf.setEditable(true);
    }
    
    public void disableFields(){
    	txtNome.setEditable(false);
        txtSobrenome.setEditable(false);
        txtLogradouro.setEditable(false);
        txtNumero.setEditable(false);
        txtComplemento.setEditable(false);
        txtCep.setEditable(false);
        txtBairro.setEditable(false);
        txtCidade.setEditable(false);
        txtEstado.setEditable(false);
        txtNaturalidade.setEditable(false);
        txtNacionalidade.setEditable(false);
        txtTelefone.setEditable(false);
        txtCelular.setEditable(false);
        txtRg.setEditable(false);
        txtCpf.setEditable(false);
    }
}
